//
//  RootSwiftController.swift
//  swiftUITest
//
//  Created by mac on 2024/5/21.
//

import UIKit
import SwiftUI

/**
 在UIKit中使用SwiftUI，需要使用UIHostingController对SwiftUI进行包装，返回的是UIViewController类型。
但是UIHostingController是SwiftUI的类，在OC中是不可以直接使用的，
所以我们可以先创建一个Swift管理类，用来返回被包装的SwiftUI的控制器是UIViewController类型，
可以直接在OC代码中使用。
 */

@objc class TestSwiftUIViewManage: NSObject{
    
    func makePage1(_ pvc:RootSwiftController) -> UIViewController {
        
        // 通过传递 父vc ，来做 页面pop
        // https://stackoverflow.com/questions/75627630/how-to-push-viewcontroller-from-inside-uihostingcontrollers-swiftui-view-using
        
        let page1 = TestPage1SwiftUI()
        return UIHostingController(rootView:  page1.environmentObject(pvc))
    }
    
    func makePage2(_ pvc:RootSwiftController) -> UIViewController {
        
        // 通过传递 父vc ，来做 页面pop
        // https://stackoverflow.com/questions/75627630/how-to-push-viewcontroller-from-inside-uihostingcontrollers-swiftui-view-using
        
        let page2 = TestPage2SwiftUI()
        return UIHostingController(rootView:  page2.environmentObject(pvc))
    }
}


class RootSwiftController: UIViewController, ObservableObject {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.view.backgroundColor = .white
        
        let click2go = UIButton(frame: CGRect(x: 200, y: 200, width: 88, height: 44))
        self.view.addSubview(click2go)
        
        click2go.backgroundColor = .lightGray
        click2go.setTitle("click", for: .normal)
        click2go.setTitleColor(.black, for: .normal)
        
        click2go.addTarget(self, action: #selector(goClicked), for: .touchUpInside)
    }
    

    @objc private func goClicked() {
        let page1VC = TestSwiftUIViewManage().makePage1(self)
        
        self.navigationController?.pushViewController(page1VC, animated: true)
    }
    

}
